์ค์๊ฐ ํต์ ์ ์ํ P2P ๋คํธ์ํฌ ์ํคํ ์ฒ์ธ WebRTC ๋ฉ์ ํ ํด๋ก์ง์ ๋ณต์ก์ฑ์ ํ๊ตฌํฉ๋๋ค. ์ฅ์ , ๋จ์ , ์ฌ์ฉ ์ฌ๋ก ๋ฐ ๊ตฌํ ๊ณ ๋ ค ์ฌํญ์ ์์๋ด ๋๋ค.
ํ๋ก ํธ์๋ WebRTC ๋ฉ์ ํ ํด๋ก์ง: P2P ๋คํธ์ํฌ ์ํคํ ์ฒ ์ฌ์ธต ๋ถ์
์ค์๊ฐ ํต์ (RTC) ๋ถ์ผ์์ WebRTC(Web Real-Time Communication)๋ ์น ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์ง์ ์ํํ ํผ์ด ํฌ ํผ์ด(P2P) ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํต์ฌ ๊ธฐ์ ์ ๋๋ค. WebRTC์ ์ฌ์ฉ๋๋ ๊ทผ๋ณธ์ ์ธ ์ํคํ ์ฒ ํจํด ์ค ํ๋๋ ๋ฉ์ ํ ํด๋ก์ง์ ๋๋ค. ์ด ๊ธ์์๋ WebRTC ๋ฉ์ ํ ํด๋ก์ง์ ๋ํ ํฌ๊ด์ ์ธ ํ๊ตฌ๋ฅผ ์ ๊ณตํ์ฌ ํต์ฌ ์์น, ์ฅ์ , ๋จ์ , ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก ๋ฐ ๊ตฌํ ๊ณ ๋ ค ์ฌํญ์ ๋ถ์ํ ๊ฒ์ ๋๋ค. ํผ์ด ํฌ ํผ์ด ๋คํธ์ํฌ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๊ฒฌ๊ณ ํ๊ณ ํ์ฅ ๊ฐ๋ฅํ WebRTC ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ๊ณ ๊ตฌํํ๋ ๋ฐ ํ์ํ ์ง์์ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
WebRTC ๋ฉ์ ํ ํด๋ก์ง๋ ๋ฌด์์ธ๊ฐ์?
WebRTC ๋ฉ์ ํ ํด๋ก์ง๋ ๋ณธ์ง์ ์ผ๋ก ๊ฐ ์ฐธ๊ฐ์(๋๋ "ํผ์ด")๊ฐ ๋ค๋ฅธ ๋ชจ๋ ์ฐธ๊ฐ์์ ์ง์ ์ฐ๊ฒฐ๋ ์์ ์ฐ๊ฒฐ๋ ๋คํธ์ํฌ๋ฅผ ๋ํ๋ ๋๋ค. ๊ฐ๋จํ ๋งํด, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ํด๋ผ์ด์ธํธ๋ ๋ค๋ฅธ ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ์ง์ ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค. ์ด๋ ๋ชจ๋ ํต์ ์ด ์ค์ ์๋ฒ๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ ํด๋ผ์ด์ธํธ-์๋ฒ์ ๊ฐ์ ๋ค๋ฅธ ํ ํด๋ก์ง์ ๋์กฐ๋ฉ๋๋ค. ๋ฉ์์์๋ ๋ฐ์ดํฐ(์ค๋์ค, ๋น๋์ค, ๋ฐ์ดํฐ ์ฑ๋)๊ฐ ์ค๊ฐ ๋ผ์ฐํ ๋ ธ๋ ์์ด ํผ์ด ๊ฐ์ ์ง์ ์ ์ก๋ฉ๋๋ค.
์ด๋ฌํ ํผ์ด ํฌ ํผ์ด ํน์ฑ์ ํนํ ์์์ ์ฐธ๊ฐ์๊ฐ ์๋ ์๋๋ฆฌ์ค์์ WebRTC์ ๋ณธ์ง์ ์ธ ํจ์จ์ฑ์ ์ ๊ณตํ๋ ์ด์ ์ ๋๋ค. ๋ฏธ๋์ด ์ ์ก์ ์ํด ์ค์ ์๋ฒ๋ฅผ ์ฐํํจ์ผ๋ก์จ ์ง์ฐ ์๊ฐ์ ํฌ๊ฒ ์ค์ผ ์ ์์ด ๋ณด๋ค ๋ฐ์์ฑ์ด ๋ฐ์ด๋๊ณ ์ํธ์์ฉ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ๊ฐ๋
- ํผ์ด: WebRTC ์ธ์ ์ ๊ฐ๋ณ ์ฐธ๊ฐ์๋ก, ์ผ๋ฐ์ ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ๋๋ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ํํ๋ฉ๋๋ค.
- ์ฐ๊ฒฐ: ๋ ํผ์ด ๊ฐ์ ์ค์ ๋ ์ง์ ํต์ ์ฑ๋๋ก, ์ค๋์ค, ๋น๋์ค ๋ฐ ๋ฐ์ดํฐ ๊ตํ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ์๊ทธ๋๋ง: ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด ํผ์ด ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๋ ํ๋ก์ธ์ค์ ๋๋ค. ์๊ทธ๋๋ง์ WebRTC ์์ฒด์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ๋ฐ์๊ฐ ์์ฒด ์๊ทธ๋๋ง ๋ฉ์ปค๋์ฆ(์: WebSocket, Server-Sent Events)์ ์ ํํฉ๋๋ค.
- ICE(Interactive Connectivity Establishment): ํผ์ด๊ฐ ๋ฐฉํ๋ฒฝ, NAT(Network Address Translator) ๋ฐ ๊ธฐํ ๋คํธ์ํฌ ๋ณต์ก์ฑ์ ํ์ํ์ฌ ์๋ก ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ต์์ ๊ฒฝ๋ก๋ฅผ ๊ฒ์ํ๋ ๋ฐ ๋์์ด ๋๋ ํ๋ ์์ํฌ์ ๋๋ค.
- STUN(Session Traversal Utilities for NAT): ํผ์ด๊ฐ NAT๋ฅผ ํตํด ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๋ฐ ์ค์ํ ๊ณต๊ฐ IP ์ฃผ์๋ฅผ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์ ๋๋ค.
- TURN(Traversal Using Relays around NAT): ์ง์ ํผ์ด ํฌ ํผ์ด ์ฐ๊ฒฐ์ ์ค์ ํ ์ ์๋ ๊ฒฝ์ฐ(์: ์๊ฒฉํ ๋ฐฉํ๋ฒฝ์ผ๋ก ์ธํด) ๋์ฒด๋ก ์ฌ์ฉ๋๋ ๋ฆด๋ ์ด ์๋ฒ์ ๋๋ค.
WebRTC ๋ฉ์ ํ ํด๋ก์ง์ ์ฅ์
๋ฉ์ ํ ํด๋ก์ง๋ ํนํ ํน์ ์ฌ์ฉ ์ฌ๋ก์์ ๋ช ๊ฐ์ง ๋๋ ทํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ๋ฎ์ ์ง์ฐ ์๊ฐ: ์ง์ ์ ์ธ ํผ์ด ํฌ ํผ์ด ์ฐ๊ฒฐ์ ์ง์ฐ ์๊ฐ์ ์ต์ํํ์ฌ ๋ณด๋ค ๋ฐ์์ฑ์ด ๋ฐ์ด๋๊ณ ์ค์๊ฐ์ ์ธ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ํ์ ํ์, ์จ๋ผ์ธ ๊ฒ์ ๋ฐ ์๊ฒฉ ์ ์ด ์์คํ ๊ณผ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํฉ๋๋ค.
- ์๋ฒ ๋ถํ ๊ฐ์: ๋ฏธ๋์ด ์ฒ๋ฆฌ ๋ฐ ์ ์ก์ ํด๋ผ์ด์ธํธ๋ก ์คํ๋ก๋ํจ์ผ๋ก์จ ์ค์ ์๋ฒ์ ์์ ๋์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค. ์ด๋ ์ธํ๋ผ ๋น์ฉ์ ์ ๊ฐํ๊ณ ํ์ฅ์ฑ์ ํฅ์์ํต๋๋ค.
- ํฅ์๋ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ: ๋ฐ์ดํฐ๋ ํผ์ด ๊ฐ์ ์ง์ ์ ์ก๋์ด ์ค์ ์๋ฒ์ ๋ํ ์์กด์ฑ์ ์ค์ด๊ณ ๊ฐ์ธ ์ ๋ณด๋ฅผ ๊ฐ์ ํ ์ ์์ต๋๋ค. ์๊ทธ๋๋ง ์๋ฒ๋ ์ฌ์ ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ง๋ง ์ค์ ๋ฏธ๋์ด ์ฝํ ์ธ ๋ ํผ์ด ๋คํธ์ํฌ ๋ด์ ์ ์ง๋ฉ๋๋ค.
- ๋ณต์๋ ฅ: ๋ฉ์์ ๋ถ์ฐ๋ ํน์ฑ์ ์ฅ์ ์ ๋ ๋ณต์๋ ฅ ์๊ฒ ๋ง๋ญ๋๋ค. ํ ํผ์ด๊ฐ ์คํ๋ผ์ธ์ด ๋๋๋ผ๋ ๋ค๋ฅธ ํผ์ด ๊ฐ์ ํต์ ์ ๋ฐ๋์ ์ค๋จ์ํค์ง๋ ์์ต๋๋ค.
์: ์ค์๊ฐ ๋์์ธ ๋๊ตฌ์์ ํ์ ํ๋ ์๊ท๋ชจ ๋์์ด๋ ํ. WebRTC ๋ฉ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ฉด์ ๊ณต์ ํ๊ณ ์ต์ํ์ ์ง์ฐ์ผ๋ก ์ง์ ํต์ ํ ์ ์์ด ์ํํ ํ์ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค. ์๋ฒ๋ ์ด๊ธฐ ํธ๋์ ฐ์ดํฌ์๋ง ํ์ํ์ง๋ง ๋๋ถ๋ถ์ ๋์ญํญ์ ๋์์ด๋ ๊ฐ์ ์ง์ ์ ๋ฌ๋ฉ๋๋ค.
WebRTC ๋ฉ์ ํ ํด๋ก์ง์ ๋จ์
๋ฉ์ ํ ํด๋ก์ง์๋ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ํ๊ณ๊ฐ ์์ต๋๋ค:
- ๋์ ๋์ญํญ ์๋น: ๊ฐ ํผ์ด๋ ์ธ์ ์ ๋ค๋ฅธ ๋ชจ๋ ํผ์ด์๊ฒ ๋ฏธ๋์ด ์คํธ๋ฆผ์ ๋ณด๋ด์ผ ํฉ๋๋ค. ์ด๋ก ์ธํด ์ฐธ๊ฐ์ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋์ญํญ ์๊ตฌ ์ฌํญ์ด ์ ๊ณฑ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค(O(n^2)). ์ด๋ ๋๊ท๋ชจ ๊ทธ๋ฃน ํตํ์ ๊ฒฝ์ฐ ๋น ๋ฅด๊ฒ ์ง์ ๋ถ๊ฐ๋ฅํด์ง ์ ์์ต๋๋ค.
- ๋์ CPU ์ฌ์ฉ๋: ์ฌ๋ฌ ์ฐ๊ฒฐ์ ๋ํ ๋ฏธ๋์ด ์คํธ๋ฆผ์ ์ธ์ฝ๋ฉํ๊ณ ๋์ฝ๋ฉํ๋ ๊ฒ์ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ผ๋ฉฐ, ํนํ ์ ์ ๋ ฅ ์ฅ์น์์ ๊ฐ ํผ์ด์ CPU ๋ฆฌ์์ค์ ๋ถ๋ด์ ์ค ์ ์์ต๋๋ค.
- ํ์ฅ์ฑ ์ ํ: ๋์ญํญ ๋ฐ CPU ์ฌ์ฉ๋์ ์ ๊ณฑ ์ฆ๊ฐ๋ก ์ธํด ๋ฉ์ ํ ํด๋ก์ง๋ ์ผ๋ฐ์ ์ผ๋ก ์ฐธ๊ฐ์๊ฐ ๋ง์ ๋๊ท๋ชจ ํ์์๋ ์ ํฉํ์ง ์์ต๋๋ค. ํน์ ์๊ณ๊ฐ(์ผ๋ฐ์ ์ผ๋ก 4-5๋ช )์ ์ด๊ณผํ๋ฉด ์ฑ๋ฅ์ด ํฌ๊ฒ ์ ํ๋ฉ๋๋ค.
- ๋ณต์ก์ฑ: ๊ฒฌ๊ณ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ๋ฉ์ ํ ํด๋ก์ง๋ฅผ ๊ตฌํํ๋ ค๋ฉด ์๊ทธ๋๋ง, ICE ํ์ ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ์ ์ ์คํ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค. ์ฌ๋ฌ ํผ์ด ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ณต์กํ๊ณ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
์: ์๋ฐฑ ๋ช ์ ์ฐธ์์๊ฐ ์ฐธ์ฌํ๋ ์ ์ธ๊ณ ์จ๋น๋๋ ๋ฉ์ ํ ํด๋ก์ง์ ์ ํฉํ์ง ์์ต๋๋ค. ๊ฐ ์ฐธ์์ ์ฅ์น์ ๋์ญํญ ๋ฐ CPU ์๊ตฌ ์ฌํญ์ด ์์ฒญ๋๊ฒ ๋์์ ธ ์ฌ์ฉ์ ๊ฒฝํ์ด ์ ํ๋ ๊ฒ์ ๋๋ค.
WebRTC ๋ฉ์ ํ ํด๋ก์ง์ ์ฌ์ฉ ์ฌ๋ก
๋ฉ์ ํ ํด๋ก์ง๋ ๋ฎ์ ์ง์ฐ ์๊ฐ๊ณผ ์ง์ ์ ์ธ ํผ์ด ํฌ ํผ์ด ํต์ ์ด ์ค์ํ๊ณ ์ฐธ๊ฐ์ ์๊ฐ ์๋์ ์ผ๋ก ์ ์ ํน์ ์๋๋ฆฌ์ค์ ์ ํฉํฉ๋๋ค:
- ์๊ท๋ชจ ๊ทธ๋ฃน ํ์ ํ์: ์ฐธ๊ฐ์ ์๊ฐ ์ ํ๋ ํ ํ์, ์จ๋ผ์ธ ํํฐ๋ง ์ธ์ ๋๋ ๊ฐ์กฑ ๊ฐ์ ํ์ ํตํ์ ์ด์์ ์ ๋๋ค.
- ํผ์ด ํฌ ํผ์ด ํ์ผ ๊ณต์ : ์ค์ ์๋ฒ์ ์์กดํ์ง ์๊ณ ์ฌ์ฉ์ ๊ฐ์ ์ง์ ํ์ผ ์ ์ก์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ์ ์ง์ฐ ์จ๋ผ์ธ ๊ฒ์: ์๊ท๋ชจ ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์์ ํ๋ ์ด์ด ๊ฐ์ ์ค์๊ฐ ์ํธ ์์ฉ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์๊ฒฉ ์ ์ด ์ ํ๋ฆฌ์ผ์ด์ : ์ต์ํ์ ์ง์ฐ์ด ์ค์ํ ์ปดํจํฐ ๋๋ ๋ก๋ด๊ณผ ๊ฐ์ ์ฅ์น์ ๋ํ ๋ฐ์์ฑ ์๋ ์๊ฒฉ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๊ฐ์ธ ๋น๋์ค/์ค๋์ค ์ฑํ : ํ๋ ๋ช ์ ๋ค๋ฅธ ์ฌ๋๊ณผ ์ง์ ํต์ ํ๋ฉด ๋ฉ์์ ์ด์ ์ ๋จ์ ์์ด ๋๋ฆด ์ ์์ต๋๋ค.
๋ฉ์ ํ ํด๋ก์ง์ ๋์
๋ฉ์ ํ ํด๋ก์ง์ ํ๊ณ๊ฐ ๋ฌธ์ ๊ฐ ๋ ๋, ํนํ ์ฐธ๊ฐ์ ์๊ฐ ์ฆ๊ฐํ ๋, SFU(Selective Forwarding Units) ๋๋ MCU(Multipoint Control Units)์ ๊ฐ์ ๋์ ์ํคํ ์ฒ๋ ๋ ๋์ ํ์ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค.
- SFU(Selective Forwarding Unit): SFU๋ ๋ฏธ๋์ด ๋ผ์ฐํฐ ์ญํ ์ ํ์ฌ ๊ฐ ํผ์ด์ ๋ฏธ๋์ด ์คํธ๋ฆผ์ ์์ ํ๊ณ ๊ด๋ จ ์คํธ๋ฆผ๋ง ๋ค๋ฅธ ํผ์ด๋ก ์ ๋ฌํฉ๋๋ค. ์ด๋ ๋ฉ์๋ณด๋ค ๊ฐ ํผ์ด์ ๋์ญํญ ๋ฐ CPU ์๊ตฌ ์ฌํญ์ ์ค์ ๋๋ค.
- MCU(Multipoint Control Unit): MCU๋ ๋ฏธ๋์ด ์คํธ๋ฆผ์ ๋์ฝ๋ฉํ๊ณ ๋ค์ ์ธ์ฝ๋ฉํ์ฌ ๋ชจ๋ ์ฐธ๊ฐ์์๊ฒ ์ ์ก๋๋ ๋ณตํฉ ์คํธ๋ฆผ์ ์์ฑํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋น๋์ค ๋ ์ด์์ ์ฌ์ฉ์ ์ ์ ๋ฐ ๋์ญํญ ์ ์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ง๋ง ์ง์ฐ ์๊ฐ์ด ๋ ๊ธธ์ด์ง๊ณ ์๋ฒ์์ ์๋นํ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ํ์ํฉ๋๋ค.
๋ฉ์, SFU ๋ฐ MCU ๊ฐ์ ์ ํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ง์ฐ ์๊ฐ, ํ์ฅ์ฑ, ๋น์ฉ ๋ฐ ๊ธฐ๋ฅ ์ธํธ์ ๊ฐ์ ์์๋ฅผ ๊ท ํ ์๊ฒ ๊ณ ๋ คํฉ๋๋ค.
WebRTC ๋ฉ์ ํ ํด๋ก์ง ๊ตฌํ: ์ค์ฉ์ ์ธ ๊ฐ์ด๋
WebRTC ๋ฉ์ ํ ํด๋ก์ง๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ช ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๊ฐ ํ์ํฉ๋๋ค:
- ์๊ทธ๋๋ง ์๋ฒ ์ค์ : ์๊ทธ๋๋ง ๋ฉ์ปค๋์ฆ(์: WebSocket)์ ์ ํํ๊ณ ํผ์ด ๊ฐ ๋ฉํ๋ฐ์ดํฐ ๊ตํ์ ์ฉ์ดํ๊ฒ ํ๋ ์๋ฒ๋ฅผ ๊ตฌํํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ธ์ ์์, ํผ์ด ๊ฒ์ ๋ฐ ICE ํ๋ณด์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค.
- ํผ์ด ์ฐ๊ฒฐ ์์ฑ: ๊ฐ ํผ์ด๋ ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ ๊ด๋ฆฌํ๋ ํต์ฌ WebRTC API์ธ `RTCPeerConnection` ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
- ICE ํ๋ณด ๊ตํ: ํผ์ด๋ ICE ํ๋ณด(์ ์ฌ์ ์ธ ๋คํธ์ํฌ ์ฃผ์)๋ฅผ ์์งํ๊ณ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํตํด ๊ตํํฉ๋๋ค. ์ด๋ฅผ ํตํด ํผ์ด๋ ๋ฐฉํ๋ฒฝ ๋ฐ NAT๋ฅผ ํ์ํ์ฌ ํต์ ์ ์ํ ์ต์์ ๊ฒฝ๋ก๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค.
- ์ ์/์๋ต ๊ตํ: ํ ํผ์ด๋ ์ ์(๋ฏธ๋์ด ๊ธฐ๋ฅ์ ๋ํ SDP ์ค๋ช )์ ์์ฑํ๊ณ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํตํด ๋ค๋ฅธ ํผ์ด๋ก ๋ณด๋ ๋๋ค. ์์ ํผ์ด๋ ์๋ต(์์ ์ ๋ฏธ๋์ด ๊ธฐ๋ฅ์ ๋ํ SDP ์ค๋ช )์ ์์ฑํ์ฌ ๋ค์ ๋ณด๋ ๋๋ค. ์ด๋ฅผ ํตํด ๋ฏธ๋์ด ์ธ์ ์ ๋ํ ๋งค๊ฐ๋ณ์๊ฐ ์ค์ ๋ฉ๋๋ค.
- ๋ฏธ๋์ด ์คํธ๋ฆผ ์ฒ๋ฆฌ: ์ฐ๊ฒฐ์ด ์ค์ ๋๋ฉด ํผ์ด๋ `getUserMedia` API ๋ฐ `RTCPeerConnection`์ `addTrack` ๋ฐ `ontrack` ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋์ด ์คํธ๋ฆผ(์ค๋์ค ๋ฐ ๋น๋์ค)์ ๋ณด๋ด๊ณ ๋ฐ์ ์ ์์ต๋๋ค.
- ์ฐ๊ฒฐ ๊ด๋ฆฌ: ํผ์ด ์ฐ๊ฒฐ ๋๊น, ์ค๋ฅ ์กฐ๊ฑด ๋ฐ ์ธ์ ์ข ๋ฃ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํฉ๋๋ค.
์ฝ๋ ์์ (๋จ์ํ๋จ)
์ด๊ฒ์ ํผ์ด ์ฐ๊ฒฐ์ ๋ง๋ค๊ณ ICE ํ๋ณด๋ฅผ ๊ตํํ๋ ๊ธฐ๋ณธ ๋จ๊ณ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋จ์ํ๋ ์์ ์ ๋๋ค:
// ์๊ทธ๋๋ง ์๋ฒ ์ด๊ธฐํ(์: WebSocket ์ฌ์ฉ)
const socket = new WebSocket('ws://example.com/signaling');
// RTCPeerConnection ์์ฑ
const pc = new RTCPeerConnection();
// ICE ํ๋ณด ์ฒ๋ฆฌ
pc.onicecandidate = (event) => {
if (event.candidate) {
// ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํตํด ๋ค๋ฅธ ํผ์ด๋ก ICE ํ๋ณด ์ ์ก
socket.send(JSON.stringify({ type: 'ice-candidate', candidate: event.candidate }));
}
};
// ๋ค๋ฅธ ํผ์ด๋ก๋ถํฐ ICE ํ๋ณด ์์
socket.onmessage = (event) => {
const message = JSON.parse(event.data);
if (message.type === 'ice-candidate' && message.candidate) {
pc.addIceCandidate(message.candidate);
}
};
// ์ ์ ์์ฑ(ํธ์ถ์ ํผ์ด์ฉ)
pc.createOffer()
.then(offer => pc.setLocalDescription(offer))
.then(() => {
// ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ํตํด ๋ค๋ฅธ ํผ์ด๋ก ์ ์ ์ ์ก
socket.send(JSON.stringify({ type: 'offer', sdp: pc.localDescription.sdp }));
});
์ค์ ์ฐธ๊ณ : ์ด๊ฒ์ ๋งค์ฐ ๋จ์ํ๋ ์์ ์ด๋ฉฐ ํ๋ก๋์ ์ค๋น WebRTC ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํ ์ค๋ฅ ์ฒ๋ฆฌ, ๋ฏธ๋์ด ์คํธ๋ฆผ ์ฒ๋ฆฌ ๋๋ ๊ธฐํ ํ์ ์ธก๋ฉด์ ํฌํจํ์ง ์์ต๋๋ค. ํผ์ด ์ฐ๊ฒฐ ์์ฑ ๋ฐ ICE ํ๋ณด ๊ตํ์ ํต์ฌ ๊ฐ๋ ์ ์ค๋ช ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
๊ณผ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
๊ฒฌ๊ณ ํ๊ณ ํ์ฅ ๊ฐ๋ฅํ WebRTC ๋ฉ์ ํ ํด๋ก์ง๋ฅผ ๊ตฌํํ๋ ๋ฐ๋ ๋ช ๊ฐ์ง ๊ณผ์ ๊ฐ ์์ ์ ์์ต๋๋ค:
- NAT ํต๊ณผ: NAT๋ ์ง์ ์ ์ธ ํผ์ด ํฌ ํผ์ด ์ฐ๊ฒฐ์ ๋ฐฉํดํ ์ ์์ต๋๋ค. STUN ๋ฐ TURN ์๋ฒ๋ ์ด๋ฌํ ๋ณต์ก์ฑ์ ํ์ํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ๋ฐฉํ๋ฒฝ ๋ฌธ์ : ๋ฐฉํ๋ฒฝ์ WebRTC ํธ๋ํฝ์ ์ฐจ๋จํ ์ ์์ต๋๋ค. ์ฐ๊ฒฐ์ ๋ณด์ฅํ๋ ค๋ฉด ์ ์ ํ ๊ตฌ์ฑ๊ณผ TURN ์๋ฒ ์ฌ์ฉ์ด ์ค์ํฉ๋๋ค.
- ๋์ญํญ ๊ด๋ฆฌ: ํนํ ์ฌ๋ฌ ๋์ ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ ๋ ๋คํธ์ํฌ ๊ณผ๋ถํ๋ฅผ ํผํ๊ธฐ ์ํด ๋์ญํญ ์ฌ์ฉ๋์ ์ ์คํ๊ฒ ๊ด๋ฆฌํฉ๋๋ค.
- CPU ์ต์ ํ: ํนํ ์ ์ ๋ ฅ ์ฅ์น์์ CPU ์ฌ์ฉ๋์ ์ต์ํํ๊ธฐ ์ํด ๋ฏธ๋์ด ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉ์ ์ต์ ํํฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํ๋์จ์ด ๊ฐ์ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
- ๋ณด์: WebRTC๋ ๋ฏธ๋์ด ์คํธ๋ฆผ์ ์ํธํํ๊ณ ๋์ฒญ์ผ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํด DTLS-SRTP์ ๊ฐ์ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ํตํฉํฉ๋๋ค. ์ด๋ฌํ ๋ณด์ ๊ธฐ๋ฅ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์๋์ง ํ์ธํฉ๋๋ค.
- ์๊ทธ๋๋ง ์๋ฒ ์ ๋ขฐ์ฑ: ์๊ทธ๋๋ง ์๋ฒ๋ WebRTC ์ํคํ ์ฒ์ ์ค์ ๊ตฌ์ฑ ์์์ ๋๋ค. ํต์ ์ค๋จ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ณ ๊ฐ์ฉ์ฑ์ด ์๊ณ ์์ ์ ์ธ์ง ํ์ธํฉ๋๋ค.
- ์ฅ์น ํธํ์ฑ: WebRTC ์ง์์ ๋ธ๋ผ์ฐ์ ๋ฐ ์ฅ์น๋ง๋ค ๋ค๋ฅผ ์ ์์ต๋๋ค. ํธํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ค์ํ ํ๋ซํผ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํฉ๋๋ค.
- ๋คํธ์ํฌ ์กฐ๊ฑด: WebRTC ์ฐ๊ฒฐ์ ํจํท ์์ค ๋ฐ ์งํฐ์ ๊ฐ์ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๋ฏผ๊ฐํฉ๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด์ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ๊ณ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ์งํ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํฉ๋๋ค.
๋๊ตฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ช ๊ฐ์ง ๋๊ตฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด WebRTC ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ด ๋จ์ํ๋ ์ ์์ต๋๋ค:
- SimpleWebRTC: WebRTC ๊ฐ๋ฐ์ ์ํ ๋จ์ํ๋ API๋ฅผ ์ ๊ณตํ๋ ๊ณ ๊ธ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- PeerJS: WebRTC์ ๋ง์ ๋ณต์ก์ฑ์ ์ถ์ํํ์ฌ ํผ์ด ํฌ ํผ์ด ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์ ๋ ์ฝ๊ฒ ๋ง๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Kurento: SFU ๋ฐ MCU ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ๊ณ ๊ธ WebRTC ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฏธ๋์ด ์๋ฒ์ ๋๋ค.
- Janus: ๋ค์ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ์คํ ์์ค WebRTC ๋ฏธ๋์ด ์๋ฒ์ ๋๋ค.
WebRTC ๋ฉ์ ํ ํด๋ก์ง์ ๋ฏธ๋
๋ฉ์ ํ ํด๋ก์ง์๋ ํ๊ณ๊ฐ ์์ง๋ง ํน์ ์ฌ์ฉ ์ฌ๋ก์ ์ ์ฉํ ์ํคํ ์ฒ ํจํด์ผ๋ก ๋จ์ ์์ต๋๋ค. WebRTC ๊ธฐ์ ๋ฐ ๋คํธ์ํฌ ์ธํ๋ผ์ ์ง์์ ์ธ ๋ฐ์ ์ ๊ธฐ๋ฅ์ ์ง์์ ์ผ๋ก ๊ฐ์ ํ๊ณ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์์ต๋๋ค.
ํ ๊ฐ์ง ์ ๋งํ ์ถ์ธ๋ AV1๊ณผ ๊ฐ์ ๋ ํจ์จ์ ์ธ ๋ฏธ๋์ด ์ฝ๋ฑ์ ๊ฐ๋ฐ๋ก, ๋์ญํญ ์๋น๋ฅผ ์ค์ด๊ณ ๋น๋์ค ํ์ง์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ ๋ค๋ฅธ ํ์ ์์ญ์ WebRTC ์ฑ๋ฅ์ ๋์ฑ ์ต์ ํํ ์ ์๋ ์๋ก์ด ๋คํธ์ํฌ ํ ํด๋ก์ง ๋ฐ ๋ผ์ฐํ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ํ๊ตฌ์ ๋๋ค.
๊ถ๊ทน์ ์ผ๋ก WebRTC ๋ฉ์ ํ ํด๋ก์ง์ ๋ฏธ๋๋ ์ค์๊ฐ ํต์ ์ ์งํํ๋ ์๊ตฌ ์ฌํญ์ ์ ์ํ๊ณ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฎ์ ์ง์ฐ ์๊ฐ, ํผ์ด ํฌ ํผ์ด ๊ฒฝํ์ ์ง์์ ์ผ๋ก ์ ๊ณตํ ์ ์๋ ๋ฅ๋ ฅ์ ๋ฌ๋ ค ์์ต๋๋ค. ๊ฐ์ ๊ณผ ์ฝ์ ์ ์ดํดํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ด๋ฅผ ํ์ฉํ์ฌ ํ์ ์ ์ด๊ณ ๋งค๋ ฅ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
๊ฒฐ๋ก
WebRTC ๋ฉ์ ํ ํด๋ก์ง๋ ๋ฎ์ ์ง์ฐ ์๊ฐ๊ณผ ์ค์ด๋ ์๋ฒ ๋ถํ๋ก ์ค์๊ฐ ํต์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฐ๋ ฅํ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. SFU ๋๋ MCU์ ๊ฐ์ ๋ค๋ฅธ ์ํคํ ์ฒ์ ๋นํด ํ์ฅ์ฑ์ด ์ ํ์ ์ด์ง๋ง ์๊ท๋ชจ ๊ทธ๋ฃน ์ํธ ์์ฉ, ํผ์ด ํฌ ํผ์ด ํ์ผ ๊ณต์ ๋ฐ ์ง์ ์ ์ธ ํผ์ด ํฌ ํผ์ด ํต์ ์ด ์ค์ํ ๊ธฐํ ์๋๋ฆฌ์ค์ ์ฌ์ ํ ๋งค๋ ฅ์ ์ธ ์ ํ์ ๋๋ค. ๋ฉ์ ํ ํด๋ก์ง์ ์ฅ์ ๊ณผ ๋จ์ ์ ์ ์คํ๊ฒ ๊ณ ๋ คํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ณ ์ํํ๊ณ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ WebRTC ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ์ฌ ์ ์ธ๊ณ์ ์ฐ๊ฒฐ์ ์ด์งํ ์ ์์ต๋๋ค.